<?php
// +----------------------------------------------------------------------
// | RXThinkCMF_TP5.1混编版框架 [ RXThinkCMF ]
// +----------------------------------------------------------------------
// | 版权所有 2022 南京RXThinkCMF研发中心
// +----------------------------------------------------------------------
// | 官方网站: http://www.rxthink.cn
// +----------------------------------------------------------------------
// | 作者: 牧羊人 <rxthinkcmf@163.com>
// +----------------------------------------------------------------------
// | 免责声明:
// | 本软件框架禁止任何单位和个人用于任何违法、侵害他人合法利益等恶意的行为，禁止用于任何违
// | 反我国法律法规的一切平台研发，任何单位和个人使用本软件框架用于产品研发而产生的任何意外
// | 、疏忽、合约毁坏、诽谤、版权或知识产权侵犯及其造成的损失 (包括但不限于直接、间接、附带
// | 或衍生的损失等)，本团队不承担任何法律责任。本软件框架只能用于公司和个人内部的法律所允
// | 许的合法合规的软件产品研发，详细声明内容请阅读《框架免责声明》附件；
// +----------------------------------------------------------------------

namespace app\api\controller;

use app\api\model\User;
use app\api\service\UserService;
use think\Request;
use util\Jwt;

/**
 * Class Demo
 * @package app\api\controller
 */
class Demo extends APIBase
{
    /**
     * 初始化方法
     * @param Request $request
     * @author 牧羊人
     * @date 2019/8/28
     */
    public function initialize()
    {
        parent::initialize(); // TODO: Change the autogenerated stub
        $this->model = new User();
        $this->service = new UserService();
    }

    /**
     * 数据演示【只是写一些操作案例，看看了解即可】
     * @author 牧羊人
     * @date 2019/8/29
     */
    public function index()
    {

        //=====================  框架缓存使用按钮,框架已集成，看看了解就好,只是方便你了解，单独写个实例  ==========================

        // 设置缓存
        $this->model->setCache('name', '相约在冬季');
        // 获取缓存
        $result = $this->model->getCache('name');
        print_r($result);exit;


        //=====================  JWT使用案例,框架已集成，看看了解就好  ==========================
        // 实例化Jwt
        $jwt = new Jwt();

        // 获取token
        $token = $jwt->getToken(1);
//        print_r($token);

        // 解密jwt信息
        $uid = $jwt->verifyToken($token);
        print_r($uid);
        exit;

        // ======================  框架事务使用方法案例  ================================
        // 备注：框架已经高度集成Redis缓存技术和数据模型技术，当在使用事务过程中，操作失败事务进行回滚时也会同步清除相关的Redis缓存
        // 你只需要关心业务，无需考虑底层，一切都已帮你封装好

        // 开启事务
        $this->model->startTrans();

        // 业务实现
        $result = $this->model->edit([
            'id' => 1,
            'realname' => '超级管理员5',
        ]);
        if ($result) {
            // 事务回滚
            $this->model->rollback();
        }

        // 提交事务
        $this->model->commit();

        // 验证Redis是否已更新
        $info = $this->model->getInfo(1);
        print_r($info);
        exit;


    }

    /**
     * 获取用户信息事例
     * @author 牧羊人
     * @date 2019/8/28
     */
    public function getMyInfo()
    {
//        // 必须登录
//        $this->needLogin();
        // 获取用户信息
        $result = $this->service->getMyInfo($this->req);
        $this->jsonReturn($result);
    }

    /**
     * 获取所有用户列表
     * @author 牧羊人
     * @date 2019/8/28
     */
    public function getAllUser()
    {
        $result = $this->service->getAllUser();
        $this->jsonReturn(MESSAGE_OK, true, $result);
    }

    /**
     * 获取数据列表
     * @author 牧羊人
     * @date 2019/8/28
     */
    public function getDataList()
    {
        $result = $this->service->getDataList($this->req, $this->userId);
        $this->jsonReturn($result);
    }

    /**
     * 获取分页数据列表
     * @author 牧羊人
     * @date 2019/8/28
     */
    public function getPageList()
    {
        // 登录校验(备注：在必须要在登录状态下才能访问的接口，可以在此添加如下代码进行登录状态校验)
//        $this->needLogin();

        // 获取数据列表
        $result = $this->service->getPageList($this->req, $this->userId);
        $this->jsonReturn($result);
    }
}
